/*
 * The contents of this web application are subject to the Mozilla Public License Version 
 * 1.1 (the "License"); you may not use this web application except in compliance with 
 * the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/.
 * 
 * Software distributed under the License is distributed on an "AS IS" basis, 
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
 * for the specific language governing rights and limitations under the License.
 * 
 * The Original Code is owned by and the Initial Developer of the Original Code is 
 * Composite A/S (Danish business reg.no. 21744409). All Rights Reserved
 * 
 * Section 11 of the License is EXPRESSLY amended to include a provision stating 
 * that any dispute, including but not limited to disputes related to the enforcement 
 * of the License, to which Composite A/S as owner of the Original Code, as Initial 
 * Developer or in any other role, becomes a part to shall be governed by Danish law 
 * and be initiated before the Copenhagen City Court ("K�benhavns Byret")            
 */

using System;
using System.Collections.Generic;

namespace Composite.Tools.PackageCreator
{
	public class GuidReplacer : IDisposable
	{
		private int count = 0;
		public GuidReplacer(Guid replace, Guid need)
		{
			Stack.Push(new KeyValuePair<Guid, Guid>(replace, need));
			count++;
		}

		public GuidReplacer(IEnumerable<KeyValuePair<Guid, Guid>> list)
		{
			foreach (var item in list)
			{
				Stack.Push(item);
				count++;
			}
		}

		public static Guid Replace(Guid guid)
		{
#warning #3102 Disable GuidReplacer
			return guid;

			//if (guid == Guid.Empty)
			//    return guid;
			//foreach (var rule in Stack)
			//{
			//    if (guid == rule.Key)
			//        return rule.Value;
			//}
			//return guid;
		}

		[ThreadStatic]
		private static Stack<KeyValuePair<Guid, Guid>> stack;

		public static Stack<KeyValuePair<Guid, Guid>> Stack
		{
			get
			{
				if (stack == null)
					stack = new Stack<KeyValuePair<Guid, Guid>>();
				return stack;
			}
		}

		[ThreadStatic]
		public static Guid CompositionContainerGuid = Guid.NewGuid();

		public void Dispose()
		{
			for (int i = 0; i < count; i++)
			{
				Stack.Pop();
			}

		}
	}

}
